namespace CCStatistics.Domain.Api.Interfaces
{
    using System;
    using System.Collections.Generic;

    using ThoughtWorks.CruiseControl.Core.Publishers.Statistics;

    /// <summary>
    /// Interface for publishing output messages.
    /// </summary>
    public interface ICCStatsView
    {
        /// <summary>
        /// Clears the view
        /// </summary>
        void Clear();

        /// <summary>
        /// Writes the detail line.
        /// </summary>
        /// <param name="message">The message.</param>
        void WriteDetailLine(string message);

        /// <summary>
        /// Writes the line.
        /// </summary>
        /// <param name="message">The message.</param>
        void WriteLine(string message);

        /// <summary>
        /// Initialises the progress.
        /// </summary>
        /// <param name="totalLogFiles">The total log files.</param>
        void InitialiseProgress(int totalLogFiles);

        /// <summary>
        /// Increments the progress.
        /// </summary>
        void IncrementProgress();

        /// <summary>
        /// Alerts the batch.
        /// </summary>
        /// <param name="alertMessage">The alert message.</param>
        void AlertBatch(IEnumerator<string> alertMessage);

        /// <summary>
        /// Alerts the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        void Alert(string message);

        /// <summary>
        /// Ends the execution run.
        /// </summary>
        void EndExecutionRun(string projectName, bool cancelAbort);

        /// <summary>
        /// Updates the view from active statistics.
        /// </summary>
        /// <param name="statistics">The statistics.</param>
        /// <param name="projectName">Name of the project.</param>
        /// Documentation Created 6/19/2008
        void UpdateViewFromActiveStatistics(List<Statistic> statistics, string projectName);

        /// <summary>
        /// Renders the project start.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="param">The param.</param>
        /// <returns></returns>
        /// Documentation Created 6/19/2008
        DateTime RenderProjectStart(string name, DateTime param);
    }
}